import {defineStore} from 'pinia'
// 关键：导入配置了拦截器的_axios实例，而非默认axios
import _axios from "../api/index.js";

export const userStore = defineStore('user_store', {
    state:()=>{
        return {
            cur_user: null,
            jwt: null
        }
    },
    actions: {
        saveUser(user, jwt) {
            this.cur_user = user;
            this.jwt = jwt;
            // 关键：与拦截器统一，使用localStorage存储（而非sessionStorage）
            localStorage.setItem('user', JSON.stringify(user));
            localStorage.setItem('jwt', jwt);
            // 补充：同步更新拦截器使用的axios实例的headers
            _axios.defaults.headers.common['Authorization'] = `Bearer ${jwt}`;
        },

        clearUser() {
            this.cur_user = null;
            this.jwt = null;
            // 同步清除localStorage
            localStorage.removeItem('user');
            localStorage.removeItem('jwt');
            delete _axios.defaults.headers.common['Authorization'];
        },

        async login(payload) {
            try {

                // 关键：拦截器已返回 response.data（即 {jwt, user}），无需再解构 {data}
                const loginData = await _axios.post('/user/login', payload);

                // 验证数据结构（避免后端返回异常）
                if (!loginData.jwt || !loginData.user) {
                    throw new Error('登录数据异常，缺少jwt或user');
                }

                // 直接用 loginData 的 jwt 和 user（无需加 .data）
                this.saveUser(loginData.user, loginData.jwt);
                return loginData; // 返回数据给组件
            } catch (e) {
                // 捕获Store层的错误，补充错误信息后抛给组件
                throw new Error(`登录处理失败：${e.message || '未知错误'}`);
            }
        },
        async register(payload) {
            return await _axios.post('/user/register', payload);
        },

        // 页面加载时从localStorage恢复状态（与拦截器统一）
        checkStoredUser() {
            const storedUser = localStorage.getItem('user');
            const storedJwt = localStorage.getItem('jwt');

            if (storedUser && storedJwt) {
                this.cur_user = JSON.parse(storedUser);
                this.jwt = storedJwt;
                // 同步设置headers
                _axios.defaults.headers.common['Authorization'] = `Bearer ${storedJwt}`;
            }
        }
    }
})
